Objective-c学习笔记1(GeekBand)

1.用Objective-C实现第一个Hello GeekBand程序:

在Xcode新建工程(相信这个不难做,这里不多说),保存工程名为:Hello -YUZHIBOYI.m。程序如写:

[plain]view plaincopy

#import

int main(int argc, const char*argv[ ]) {

NSLog(@"Hello,GeekBand!!!");

return(0);

}//在Xcode控制台可以看到输出:Hello,GeekBand!!!

现在来详细分析一下这个程序的结构:

(1)首先可以看到第一行#import,意思是使用头文件来包含元素声明,#import是GCC编译器提供的,其实也可以使用像C一样#include,不过很少这样用,因为如果用#include有可能出现重复包含头文件的情况,而#import可保证头文件只被包含一次,而不论次命令实际上在文件中出现多少次。

(2)Foundation是一个框架,它是Cocoa的组成框架之一,这个框架主要是处理用户界面之下的层中的特性,比如数据结构和通信机制。Foundation是一个主头文件。

(3)NSLog(@"Hello,GeekBand!!!");跟C里面的printf用法类似,首先来看看NS的含义,这个前缀告诉你的函数来自Cocoa而不是其他工具包,然后是@这个符号的作用,这个符号是Objective-C在标准C基础上添加的特性之一,在字符串前加一个@ 符号,表示引用的字符串应该作为Cocoa的NSString元素来处理。

其他部分和C的语言基本一样,不多作解释~

2.布尔类型:

Objective-C的布尔类型BOOL,它具有YES和BNO值,在编写程序的时候可以C里的布尔类型与Objective-C的布尔类型共存,但值得注意的是编写Cocoa代码时要使用BOOL。

(1)BOOL实际上是一种对带符号类型的定义,它使用8位存储空间,YES定义为1,NO定义为0.

(2)应该注意一个字节长度问题是:当将一个长于1字节的整形值(如int值)赋给一个BOOL变量,这时只有低位字节会用作BOOL值。

(3)例子,一个比较两个整形数是否不同,不同返回YES,否则NO。

[plain]view plaincopy

#import

BOOLareDifferent(int a,int b){

if(a == b){

return(NO);

}else{

return(YES);

}

}//判断是否不同

NSString*boolString(BOOL yesNo){

if(yesNo == NO){

return(@"NO");

}else{

return(@"YES");

}

}//返回YSE或NO

int main(int argc,const char *agv[ ]){

BOOLareABDifferent;

areABDifferent = areDifferent(3,3);

NSLog(@"are %d and %d different? %@", 3,3,boolString(areABDifferent));

areABDifferent = areDifferent(8,9);

NSLog(@"are %d and %d different? %@", 8,9,boolString(areABDifferent));

return(0);

}//运行结果为:are 3 and 3 different? NO

are8 and 9 different? YES

这里唯一值得注意的是:NSlog()的字符串结尾,可以看到另一个@符号,这里表现为%@,它的意思是,表示boolString()返回一个NSString指针,printf()不能使用NSString,所以没我们能够使用的格式说明符NSlog()的编写者添加%@格式说明符。

2.基础语法

Objective c是面向对象的

1、#import(引入头文件)语法

eg:#import

#import"SelfClass.h"

@classSelfClass

备注:<>只在系统文件中查找,””先在本地查找,没找到则到系统文件中查找,import可自动防止同一个文件被导入多次。实例变量类型一般用@class引入,这个可以缩短编译时间,一般用在interface中,里面的方法和变量不可用。

2、字符串NSString

@"字符串"

3、BOOL布尔类型

有YES和NO两个值,备注:大于0的数不一定是YES。

4、控制台输出NSLog()

%@输出NSString等对象的值

3.类的定义和实现

1、@interface用于定义接口类

接口一般在.h文件(头文件)中定义,用来展示类的构造。

Eg:定义基于NSObject类的Circle类

@interfaceCircle :NSObject

{

ShapeColor *fillColor;

}

-(void) draw;

-(void)setFillColor: (ShapeColor *) fillColor secondName:(int) index;

@end

1)、大括号内的变量为类的实例变量(只在对象的实例中有效,所以称为实例变量ivar),后面的为方法声明。备注:c函数原型中没有先行短线。

2)、方法返回类型与C函数有相同的类型:标准类型(整型、浮点型、字符串)、指针、引用对象和结构体,如果方法使用参数则需要冒号,否则不需要冒号。没有声明实例变量时,无需大括号。

3)、上面多参数方法定义,也可以不需要secondName,但不推荐这样使用。

4)、有些方法的声明是先行加号,这样的方法为类方法(class method),这个方法属于类对象(而不是类的实例对象),类似于静态方法,通常用于创建新的实例,我们称这种用来创建新对象的类方法为工厂方法。

5)、在对象类型的右边都有一个*号,所有的对象变量都是指针类型。id类型(任意类型)已经被预定义为指针类型,所以不需要再加一个*号。

2、@implementation

实现类一般在.m文件(实现文件)中实现,实现了接口所声明的所有方法。

Eg:上面Circle的实现类

@import “XXX.h”//引入上面定义的头文件

@implementationCircle

- (void)setFillColor: (ShapeColor *) c

{

fillColor = c;

}

3、对象的实例化

1)、Circle *circle = [Circle new];//不建议这样使用

2)、Circle *circle = [[Circle alloc]init];//一般这样初始化

4、方法的调用

[ciclesetFillColor: kRedColor];//备注中间是空格

5、实例变量作用域的指令:

@protected实例变量可被该类及任何子类中定义的方法直接访问(默认的情况)。

@private实例变量可被定义在该类的方法直接访问,不能被子类定义的方法直接访问。

@public实例变量可被该类中定义的方法直接访问,也可被其他类或模块中定义的方法访问。使得其他方法或函数可以通过(->)来访问实例变量(不推荐用)。

@package 对于64位图像,可以在实现该类的图像的任何地方访问这个实例变量。

6、继承

@interface Circle: NSObject

不支持多继承,但Objective-C通过其它特性达到多继承的效果,例如类别和协议。

7、复合(composition)

复合就好像音乐中的作曲一样:将多个组件组合在一起,配合使用,从而得到完整的作品。严格来说,只有对象间的组合才能叫复合。

复合类之间的关系为“has a”。备注:在Objective-C中,复合是通过包含作为实例变量的对象指针实现的。

Eg:汽车有4个轮胎和一台发动机。

@interface  Car:NSObject

{

Engine *engine;

Tire *tire[4];

}

备注:为新建的Car对象分配内存时,这些指针将被初始化为nil(零值)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,219评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,363评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,933评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,020评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,400评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,640评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,896评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,597评论 0 199
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,327评论 1 244
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,581评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,072评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,399评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,054评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,083评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,849评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,672评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,585评论 2 270

推荐阅读更多精彩内容